package com.ffs.context;

/**
 * 抽象管道，处理流水线，所有的pipe都需要继承该抽象类，去调用addLast添加自己的处理流水线。
 * @author ffs80 created 2021/7/3
 */
public abstract class Pipeline {
    /**
     * 默认上下文（头）
     */
    public HandlerContext head = new HandlerContext(new AbstractHandler() {
        @Override
        public void doHandler(HandlerContext context, String param) {
            context.runNext(param);
        }
    },"默认返回值！");

    /**
     * 执行入口，参数贯通整个流程
     * @param param
     */
    public void process(String param){
        head.handler(param);
    }

    /**
     * 处理器添加，存在先后顺序，先添加的则先执行
     * @param handler 处理器
     */
    public void addLast(AbstractHandler handler){
        HandlerContext context = head;
        while (context.getNext() != null){
            context = context.getNext();
        }
        context.setNext(new HandlerContext(handler));
    }

    /**
     * 获取流水先处理的最终结果
     */
    public String getResData(){
        HandlerContext context = head;
        while (context.getNext() != null){
            context = context.getNext();
        }
        return context.getResData();
    }

    /**
     * handler初始化
     */
    public abstract void init();
}
